﻿package cn.liufuwen.jpython;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.python.core.PyObject;
import org.python.util.PythonInterpreter;


public class JythonUtil {
	private JythonUtil(){}
	/**参考：https://www.py.cn/jishu/jichu/13057.html
	 * 执行某个.py文件
	 * @param filePath
	 * @throws IOException
	 */
	public static void pythonExecute(String filePath) throws IOException{
		Properties props = new Properties();
        props.put("python.home", "path to the Lib folder");
        props.put("python.console.encoding", "UTF-8");
        
        props.put("python.security.respectJavaAccessibility", "false");
        
        props.put("python.import.site", "false");

        Properties preprops = System.getProperties();

        PythonInterpreter.initialize(preprops, props, new String[0]);
        PythonInterpreter interpreter = new PythonInterpreter();
        InputStream is = new FileInputStream(filePath);
        interpreter.execfile(is);
		is.close();
	}
	/**
	 * 获取python程序的变量值
	 * @param filePath
	 * @param ponames
	 * @return
	 * @throws IOException
	 */
	public static List<PyObject> transP2JData(String filePath, String...ponames) throws IOException{
		PythonInterpreter pin = new PythonInterpreter();
		InputStream is = new FileInputStream(filePath);
		pin.execfile(is);
		is.close();
		List<PyObject> pos = new ArrayList<>();
		for (String poname : ponames) {
			PyObject po = pin.get(poname);
			pos.add(po);
		}
		return pos;
	}
	/**
	 * 将参数赋给python程序执行
	 * @param filePath
	 * @param pomaps
	 * @throws IOException
	 */
	public static void transJ2PData(String filePath, Map<String, Object> pomaps) throws IOException {
		PythonInterpreter pin = new PythonInterpreter();
		InputStream is = new FileInputStream(filePath);
		for (String pomapkey : pomaps.keySet()) {
			pin.set(pomapkey, pomaps.get(pomapkey));
		}
		pin.execfile(is);
		is.close();
	}
	/**
	 * 将参数赋给python程序执行,并获取python中的变量值
	 * @param filePath
	 * @param pomaps
	 * @param ponames
	 * @return
	 * @throws IOException
	 */
	public static List<PyObject> transJ2PData(String filePath, Map<String, Object> pomaps, String...ponames) throws IOException {
		PythonInterpreter pin = new PythonInterpreter();
		InputStream is = new FileInputStream(filePath);
		for (String pomapkey : pomaps.keySet()) {
			pin.set(pomapkey, pomaps.get(pomapkey));
		}
		pin.execfile(is);
		is.close();
		List<PyObject> pos = new ArrayList<>();
		for (String poname : ponames) {
		PyObject po = pin.get(poname);
			pos.add(po);
		}
		return pos;
	}
}